01. 介绍
C++ 优化技巧
接下来是 C++ 优化的实战部分。你会学到一些代码优化策略,并使用它们来提升 C++ 程序的速度。
但请记住,程序优化不仅包括编程语言,还涉及其他方面。程序运行速度还取决于硬件、编译器以及所选的计算机算法。越熟悉这些不同方面,你在优化方面的工具选择就越多。下面简要总结了为什么这些方面都很重要。
硬件
部分硬件可能会有限制,拖慢代码速度。例如,计算三角函数时,处理器可能使用较慢的软件近似。如果使用 小角度近似 ,代码运行可能更快。
嵌入式硬件可能内存较小,或使用 16 或 32 位架构,而不是 64 位架构。在 16 位架构上使用 64 位整数时,编译器虽然可能支持,但效率很可能不高。
编译器
很多编译器都会至少优化部分代码。例如,如果 CPU 能展开 for 循环,避免检查条件语句,就能够提升效率:
// for loop
for (int i = 0; i < 5; i++) {
std::cout << i << "\n";
}
// for loop unrolled
std::cout << 0 << "\n";
std::cout << 1 << "\n";
std::cout << 2 << "\n";
std::cout << 3 << "\n";
std::cout << 4 << "\n";
展开的版本运行速度更快,因为展开后,就不用检查
i < 5
是否为真。要全面了解编译器的功能,可以阅读这篇
文章
。
算法
有些算法比其他算法更快。一个常见的例子是排序算法。例如, quicksort 比 bubble sort 速度更快。
还有一点是需要记住的:C++ 库非常方便,但这并不代表其使用的算法是最快的,尤其是针对你的个人情况。如果你了解深层的原理,就能找到更多的方法提升效率。
C++
现在,我们开始优化 C++。你会学到一些技巧,并练习如何使用它们。课程结束时,你将有机会优化 C++ 直方图滤波器。
以下是学习内容预览:你是否知道,每次调用函数时,C++ 都会把输入变量复制到内存中?看一下这个例子:
#include <iostream>
int addition(int a, int b);
int main() {
int x, y;
x = 5;
y = 7;
std::cout << addition(x, y) << "\n";
}
int addition(int a, int b) {
return a + b;
}
和我们预期的一样,C++ 把 x 和 y 变量放到内存中。
当你调用 addition 函数时,C++ 接下来还会把 a 和 b 变量放入内存。实际上,尽管 x 和 y 的值可以直接用,C++ 又把 x 和 y 复制了一遍。
对于一个 32 位的整数,这可能不是问题。但是,一旦你开始处理较大的变量,如二维向量时,额外的读取过程就会拖慢程序。
在本课中,你会学到如何在这些情况下提升代码速度。